#!/usr/bin/env python3
"""
智能装修设计系统启动脚本
"""
import os
import sys
import subprocess
import time
from pathlib import Path

def check_requirements():
    """检查运行环境"""
    print("🔍 检查运行环境...")
    
    # 检查Python版本
    if sys.version_info < (3, 8):
        print("❌ 需要Python 3.8或更高版本")
        return False
    print(f"✅ Python版本: {sys.version.split()[0]}")
    
    # 检查必要的文件
    required_files = [
        'requirements.txt',
        'config.py',
        'run.py',
        'app/__init__.py'
    ]
    
    for file in required_files:
        if not os.path.exists(file):
            print(f"❌ 缺少必要文件: {file}")
            return False
    
    print("✅ 环境检查通过")
    return True

def check_env_file():
    """检查环境配置文件"""
    print("🔧 检查环境配置...")
    
    if not os.path.exists('.env'):
        print("⚠️  未找到.env文件，正在创建...")
        create_env_file()
    else:
        print("✅ 找到.env配置文件")
    
    return True

def create_env_file():
    """创建环境配置文件"""
    env_content = """# Flask配置
FLASK_ENV=development
FLASK_DEBUG=True
SECRET_KEY=dev-secret-key-change-in-production

# OSS配置 - 请替换为您的实际配置
OSS_ENDPOINT=https://oss-cn-shenzhen.aliyuncs.com
OSS_ACCESS_KEY_ID=your-access-key-id
OSS_ACCESS_KEY_SECRET=your-access-key-secret
OSS_BUCKET_NAME=your-bucket-name

# Coze API配置 - 请替换为您的实际配置
COZE_PERSONAL_ACCESS_TOKEN=your-coze-token
COZE_WORKFLOW_ID=your-workflow-id

# 数据库配置
DATABASE_URL=sqlite:///decoration_app.db
"""
    
    with open('.env', 'w', encoding='utf-8') as f:
        f.write(env_content)
    
    print("✅ 已创建.env文件，请编辑其中的配置参数")

def install_dependencies():
    """安装依赖"""
    print("📦 安装Python依赖...")
    
    try:
        subprocess.run([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'], 
                      check=True, capture_output=True)
        print("✅ Python依赖安装完成")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ 依赖安装失败: {e}")
        return False

def init_database():
    """初始化数据库"""
    print("🗄️ 初始化数据库...")
    
    try:
        # 设置环境变量
        os.environ['FLASK_APP'] = 'run.py'
        
        # 初始化数据库
        result = subprocess.run([sys.executable, 'run.py', 'init-db'], 
                               check=True, capture_output=True, text=True)
        print("✅ 数据库初始化完成")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ 数据库初始化失败: {e}")
        return False

def build_frontend():
    """构建前端"""
    print("🎨 构建前端应用...")
    
    frontend_dir = Path('frontend')
    if not frontend_dir.exists():
        print("⚠️  前端目录不存在，跳过前端构建")
        return True
    
    try:
        # 检查Node.js
        subprocess.run(['node', '--version'], check=True, capture_output=True)
        print("✅ Node.js环境正常")
        
        # 安装前端依赖
        print("📦 安装前端依赖...")
        subprocess.run(['npm', 'install'], cwd=frontend_dir, check=True, capture_output=True)
        
        # 构建前端
        print("🔨 构建前端应用...")
        subprocess.run(['npm', 'run', 'build'], cwd=frontend_dir, check=True, capture_output=True)
        
        print("✅ 前端构建完成")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ 前端构建失败: {e}")
        print("💡 提示: 请确保已安装Node.js和npm")
        return False
    except FileNotFoundError:
        print("⚠️  未找到Node.js，跳过前端构建")
        return True

def start_application():
    """启动应用"""
    print("🚀 启动应用...")
    print("=" * 50)
    print("📱 应用将在以下地址启动:")
    print("   本地访问: http://localhost:5000")
    print("   网络访问: http://0.0.0.0:5000")
    print("=" * 50)
    print("💡 按 Ctrl+C 停止应用")
    print("=" * 50)
    
    try:
        # 启动Flask应用
        subprocess.run([sys.executable, 'run.py'])
    except KeyboardInterrupt:
        print("\n👋 应用已停止")
    except Exception as e:
        print(f"❌ 应用启动失败: {e}")

def main():
    """主函数"""
    print("🏠 智能装修设计系统")
    print("=" * 50)
    
    # 检查运行环境
    if not check_requirements():
        sys.exit(1)
    
    # 检查环境配置
    if not check_env_file():
        sys.exit(1)
    
    # 安装依赖
    if not install_dependencies():
        sys.exit(1)
    
    # 构建前端
    if not build_frontend():
        print("⚠️  前端构建失败，但后端仍可运行")
    
    # 初始化数据库
    if not init_database():
        sys.exit(1)
    
    # 启动应用
    start_application()

if __name__ == '__main__':
    main()
